// 定义五个计算任务
const tasks = [
    () => {
        // 任务 1：计算一个大数组的平均值
        const arraySize = 1000000;
        const randomArray = new Array(arraySize).fill(0).map(() => Math.random());
        const average = randomArray.reduce((acc, val) => acc + val, 0) / arraySize;
        return { message: `计算任务 1: 平均值为 ${average.toFixed(6)}` };
    },
    () => {
        // 任务 2：计算斐波那契数列的第 20 项
        const fibonacci = (n) => {
            if (n <= 1) return n;
            let a = 0, b = 1, c;
            for (let i = 2; i <= n; i++) {
                c = a + b;
                a = b;
                b = c;
            }
            return b;
        };
        console.log( { message: `计算任务 2: 斐波那契数列的第 20 项为 ${fibonacci(20)}` });
        
        return { message: `计算任务 2: 斐波那契数列的第 20 项为 ${fibonacci(20)}` };
    },
    () => {
        // 任务 3：计算 1 到 1000000 的和
        const sum = (n) => (n * (n + 1)) / 2;
        return { message: `计算任务 3: 1 到 1000000 的和为 ${sum(1000000)}` };
    },
    () => {
        // 任务 4：生成一个包含 1000000 个随机数的数组
        const randomArray = new Array(1000000).fill(0).map(() => Math.random());
        return { message: `计算任务 4: 生成了一个包含 1000000 个随机数的数组` };
    },
    () => {
        // 任务 5：计算 1 到 1000000 的平方和
        const sumOfSquares = (n) => (n * (n + 1) * (2 * n + 1)) / 6;
        return { message: `计算任务 5: 1 到 1000000 的平方和为 ${sumOfSquares(1000000)}` };
    }
];

// 监听主线程发送的消息
self.onmessage = (event) => {
    if (event.data.task === 'all') {
        // 执行所有计算任务        
        tasks.forEach((task, index) => {
            const result = task();            
            self.postMessage(result);
        });
    }
};